CFnをServerless FrameworkからDeploy
terminal.iconaws cloudformation create-stack ではなくてterminal.iconsls deploy しませんか?tsawada.icon
CFnを使うときの最高の友達
serverless.ymlテンプレートファイルを分割する - Qiita
この分割機能が胸熱なのだtsawada.iconmharuta.icon
【API作るよ】Serverless FrameworkとSAMを比較してみる - Qiita
この手のフレームワークのデファクトスタンダード……とまで言うと言いすぎかもしれませんが、この手のフレームワークにしては非常に「枯れて」いて、機能も充実しています。
枯れた技術であることって超大事tsawada.icon
Serverless Frameworkを使ったCFnの挙動は
1. terminal.iconsls deployしたcurrent directoryの serverless.ymlをみにいく
2. 関連するファイルも全て一度参照する
3. 1~2を見て合成したtemplateを./.serveless配下に~~.json 形式で保存する
ここで作業を止めたい場合はterminal.iconsls packageすると良い
参考)Serverless Framework Commands - AWS Lambda - Package
4. 3で保存したtemplateを(あらかじめserverless frameworkで作成した)S3 bucketに保存する
作成されたS3 Bucketは同一のStackで管理されているよtsawada.icon
5. 保存されたtemplateを使って、CloudFormationを実行する
Tipsは全てこちらに貯めていこう
CFn標準の機能も使うのでAWS Cloudformationも参照くださいtsawada.icon
特にAWS CloudFormation 組み込み関数のFn::GetAttとRefをよく使う。
同じtemplate内で「先に作成されたAWS resource」の情報を参照するときに使う
serveless.ymlの書き方と、それぞれの意味合い
code:serverless.yml
service: aws-datascience-infra #{service名}-{stage名} がstack名になる
provider: #ここで「AWSの** regionでCloudFormationするんだよ」と指定
name: aws
stage: ${opt:stage, self:custom.defaultStage}
region: ${opt:region, self:custom.defaultRegion}
custom:
defaultStage: dev #sls deploy時に --stage で指定しなくても大丈夫なように
defaultRegion: ap-northeast-1 #sls deploy時に --region で指定しなくても大丈夫なように
accountId:
dev: 604985511858
stg: 384253122252
prod: 326773496668
branchName:
dev: source
stg: develop
prod: master
resources:
- ${file(./cloudformation/chatbot.yml)} #templateを分割することで見通しをよくしている
- ${file(./cloudformation/IAMRole.yml)} #templateを分割することで見通しをよくしている
- ${file(./cloudformation/S3.yml)} #templateを分割することで見通しをよくしている
プラスして、検証してみたこと
customをenvにするとNGtsawada.icon
no indent部分はservice, provider,custom,resources と決まっているみたい
${file(~~)}で指定するときは、同一行に-または(key名):の記載が必要tsawada.icon
これもNGでる
resources:直下には- ${file(~~)}いくつおいても良いtsawada.icon
fileの中では以下のような構成
code:./cloudformation/chatbot.yml
Resources:
ChatbotIAMRole:
~~~
ChatbotIAMRoleTwo:
~~~
ChatbotIAMRoleThree:
~~~
ここら辺めっちゃ検証したwtsawada.icon
resources:ではなくResources:直下に- ${file(~~)}で並べるのはNG
Resources:直下はkey : valueがズラーっと並んで欲しいのに、なぜか配列表記になる。
code:もとの.yml
Resources:
- ${file(./cloudformation/ChatbotIAMRole.yml)}
- ${file(./cloudformation/ChatbotIAMRoleTwo.yml)}
- ${file(./cloudformation/ChatbotIAMRoleThree.yml)}
code:本当は欲しい.yml
Resources:
ChatbotIAMRole:
~~~
ChatbotIAMRoleTwo:
~~~
ChatbotIAMRoleThree:
~~~
code:こうなっちゃう.yml
Resources:
- ChatbotIAMRole:
~~~
- ChatbotIAMRoleTwo:
~~~
- ChatbotIAMRoleThree:
~~~
結果として、tsawada.iconは以下の書き方にしている
code:結論.yml
Resources:
ChatbotIAMRole: ${file(./cloudformation/ChatbotIAMRole.yml)}
ChatbotIAMRoleTwo: ${file(./cloudformation/ChatbotIAMRoleTwo.yml)}
ChatbotIAMRoleThree: ${file(./cloudformation/ChatbotIAMRoleThree.yml)}